home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C++ / Applications / Nuntius 1.2 / src / Nuntius / UGroupTree.h < prev    next >
Encoding:
Text File  |  1994-03-06  |  3.9 KB  |  126 lines  |  [TEXT/MPS ]

  1. // Copyright © 1992 Peter Speck, speck@dat.ruc.dk. All rights reserved.
  2. // UGroupTree.h
  3.  
  4. #define __UGROUPTREE__
  5.  
  6. struct Node; // private
  7. typedef Node *NodePtr;
  8. class PDynDynArray;
  9.  
  10. const ArrayIndex kFirstIndex = 1;
  11. class TGroupList;
  12.  
  13. class TGroupTree : public TDynamicArray
  14. {
  15.     public:
  16.         void GetDotNameFromNodeIndex(ArrayIndex index, CStr255 &name);
  17.         ArrayIndex GetNodeIndexFromDotName(const CStr255 &dotName);
  18.         ArrayIndex FindSubGroupIndexFromLine(TLongintList *expandData, ArrayIndex windowFolderIndex, ArrayIndex line);
  19.         ArrayIndex GetParentIndex(ArrayIndex index);
  20.  
  21.         Boolean HasGroup(const CStr255 &dotName);
  22.         void GetDrawInfo(ArrayIndex index, long &level, CStr255 &text, Boolean &isFolder);
  23.         void GetHelpText(ArrayIndex index, CStr255 &help);
  24.         ArrayIndex GetNoItems(TLongintList *expandData, ArrayIndex startIndex);
  25.         CRect GetWindowFrame(ArrayIndex index);
  26.         void SetWindowFrame(ArrayIndex index, const CRect &frame);
  27.  
  28.         long GetLastReadArticleID(const CStr255 &dotName);
  29.         void SetLastReadArticleID(const CStr255 &dotName, long lastID);
  30.         long GetLastUpdatedArticleID(const CStr255 &dotName);
  31.         void SetLastUpdatedArticleID(const CStr255 &dotName, long lastID);
  32.  
  33.  
  34.         void Expand(TLongintList *expandData, Boolean doExpand, Boolean wayDown, ArrayIndex index, ArrayIndex &deltaLines);
  35.  
  36.         void UpdateGroupTree(Handle groupListH, TGroupList *newGroups); // newGroups may be nil
  37.         void UpdateDescriptions(Handle h);
  38.         Boolean TreeIsEmpty();
  39.  
  40.         void WriteTreeInfo(TStream *aStream);
  41.         void ReadTreeInfo(TStream *aStream);
  42.  
  43.         void DoRead(TStream *aStream);
  44.         void DoWrite(TStream *aStream);
  45.         void DoNeedDiskSpace(long &dataForkBytes);
  46.         void DoInitialState();
  47.         TGroupTree();
  48.         pascal void Initialize();
  49.         void IGroupTree();
  50.         pascal void Free();
  51.     protected:
  52.         friend class CFindSubGroupIterator;
  53.         friend class CRealGroupIterator;
  54.         
  55.         PDynDynArray *fGroupNameList;
  56.         PDynDynArray *fHelpTextList;
  57.         
  58.         NodePtr ComputeNodeAddress(ArrayIndex index);
  59.         const CStr255 &GetNodeName(ArrayIndex index);
  60.         void FetchDebugNodeName(ArrayIndex index);
  61.         
  62.         Boolean GetNextSubName(const CStr255 &dotName, short &index, CStr255 &subName);
  63.         void AddGroupEntry(CStr255 &subName, ArrayIndex parentIndex, Boolean isReal, 
  64.                                                             ArrayIndex &firstIndex, 
  65.                                                             ArrayIndex &index, Boolean &newSubNode, ArrayIndex &deltaGroups);
  66.         void AddSubGroup(const CStr255 &dotName, short dotNameIndex, ArrayIndex parentIndex, ArrayIndex &deltaGroups);
  67.         void AddGroup(const CStr255 &dotName, Boolean &isNewGroup);
  68.         void GetLineFromText(Handle h, long size, long &offset, CStr255 &line);
  69.         
  70.         void DumpTree();
  71.         void DumpTreePart(ArrayIndex index, ArrayIndex level);
  72.         void DumpAllNodes();
  73.  
  74.         ArrayIndex SubGetNoItems(TLongintList *expandData, ArrayIndex parentIndex);
  75.  
  76.         void DoExpand(TLongintList *expandData, NodePtr nodeIndex1P, ArrayIndex index, Boolean doExpand, 
  77.                                     Boolean wayDown, ArrayIndex &deltaLines, Boolean groupsIsVisible);
  78. };
  79.  
  80.  
  81. class CRealGroupIterator : public CIterator
  82. {
  83.     public:
  84.         CRealGroupIterator(TGroupTree *groupTree, ArrayIndex startIndex);
  85.         ~CRealGroupIterator();
  86.         ArrayIndex FirstGroup();
  87.         Boolean More();
  88.         ArrayIndex NextGroup();
  89.  
  90.     protected:
  91.         void Advance();
  92.  
  93.     private:
  94.         TGroupTree *fGroupTree;
  95.         ArrayIndex fStartIndex;
  96.         ArrayIndex fIndex;
  97.         Boolean fPrevGroupDebugLock;
  98. };
  99.  
  100. class CFindSubGroupIterator : public CIterator
  101. {
  102.     public:
  103.         CFindSubGroupIterator(TGroupTree *groupTree, TLongintList *expandData, ArrayIndex windowFolderIndex, ArrayIndex line);
  104.         ~CFindSubGroupIterator();
  105.         ArrayIndex FirstGroup();
  106.         Boolean More();
  107.         ArrayIndex NextGroup();
  108.     protected:
  109.         void Advance();
  110.         
  111.     private:
  112.         TGroupTree *fGroupTree;
  113.         TLongintList *fExpandData;
  114.         ArrayIndex fIndex;
  115.         ArrayIndex fOffset;
  116.         ArrayIndex fLine;
  117.         ArrayIndex fWindowFolderIndex;
  118.         Boolean fPrevGroupLock;
  119. };
  120.  
  121. #if !qDebug
  122. inline Node *TGroupTree::ComputeNodeAddress(ArrayIndex index)
  123. {
  124.     return NodePtr(inherited::ComputeAddress(index));
  125. }
  126. #endif